package jp.co.nes.awssupport.business.logic;

import java.util.ArrayList;
import java.util.List;

import jp.co.nes.awssupport.access.dao.BlendedReservedManageDao;
import jp.co.nes.awssupport.access.utility.IdUtil;
import jp.co.nes.awssupport.business.bean.BillingCsvBean;
import jp.co.nes.awssupport.common.bean.BlendedReservedManageBean;
import jp.co.nes.awssupport.common.utility.BeanUtil;

/**
 * 融通リザーブド管理処理です。
 */
public class BlendedReservedManageProcessing {

    /** バケット名 */
    private String bucketName;

    /** オブジェクトキー */
    private String objectKey;

    /**
     * バケット名、オブジェクトキーを引数にもつコンストラクタです。
     *
     * @param bucketName バケット名
     * @param objectKey オブジェクトキー
     */
    public BlendedReservedManageProcessing(String bucketName, String objectKey) {
        this.bucketName = bucketName;
        this.objectKey = objectKey;
    }

    /**
     * 融通リザーブド管理を保存します。
     *
     * @param csvList 請求CSV
     * @param max バッチ更新の最大数
     */
    public void save(List<BillingCsvBean> csvList, int max) {
        List<BlendedReservedManageBean> brmList = new ArrayList<>();
        for (BillingCsvBean csvBean : csvList) {
            brmList.add(toBlendedReservedManageBean(csvBean, bucketName, objectKey));
        }
        BlendedReservedManageDao dao = new BlendedReservedManageDao();
        dao.delete(bucketName, objectKey);
        dao.insert(brmList, max);
    }

    /**
     * 融通リザーブ管理を返却します。
     *
     * @param csvBean 日次集計一時処理用Bean
     * @param bucketName バケット名
     * @param objectKey オブジェクトキー
     * @return 融通リザーブ管理
     */
    protected BlendedReservedManageBean toBlendedReservedManageBean(BillingCsvBean csvBean, String bucketName,
            String objectKey) {
        BlendedReservedManageBean brmBean = new BlendedReservedManageBean();
        BeanUtil.copyProperties(brmBean, csvBean);
        brmBean.setUuid(IdUtil.createUuid());
        brmBean.setBucketName(bucketName);
        brmBean.setObjectKey(objectKey);
        // CURではレコードID, 料金プランIDは常にnullになる。
        brmBean.setRecordId(null);
        brmBean.setPricingPlanId(null);
        return brmBean;
    }
}
